package dca.sistemascontrole.malhadecontrole;

import dca.sistemascontrole.exception.LogManager;
import dca.sistemascontrole.travas.GerenciadorDeTravas;
import dca.sistemascontrole.travas.TravaTanqueSuperiorCheio;
import dca.sistemascontrole.travas.TravaTanqueSuperiorVazio;

/**
 *
 * @author Rafael
 */
public abstract class MalhaDeControle {

    public static final int MALHA_ABERTA = 1;
    public static final int MALHA_FECHADO = 2;

    public MalhaDeControle() {
    }

    public double getValorEscrita(double nivelTanqueSuperior, double nivelTanqueInfeior) {
        long t = System.currentTimeMillis();
        double nextValue = getNextValue(t, nivelTanqueSuperior, nivelTanqueInfeior);
        nextValue = ajustarAsTravas(nivelTanqueSuperior, nextValue);
        
        return nextValue;
    }

    protected abstract double getNextValue(long t, double nivelTanqueSuperior, double nivelTanqueInfeior);

    private double ajustarAsTravas(double nivelTanqueSuperior, double nextValue) {
        try {
            GerenciadorDeTravas.testarNivelTankSuperior(nivelTanqueSuperior);
        } catch (TravaTanqueSuperiorCheio ex) {
            LogManager.logWarning("Tanque superior está cheio.");
        } catch (TravaTanqueSuperiorVazio ex) {
            LogManager.logWarning("Tanque superior está vazio");
        }

        return nextValue;
    }
}
